In recent years, the majority of computers employ an architecture referred to as a “von Neumann computer” that includes a central processing unit (CPU) at its kernel, with a storage device such as a memory connected to the CPU. Addresses are attached to all devices accessed by the CPU so that all of those devices can be operated in an address space held by the CPU.
In expectation of reducing a load on the CPU or speeding it up, a method used often is referred to as offloading, which uses an external CPU to substitute for the processing of the CPU. Particularly, in the field of networks, the processing such as a checksum calculation of TCP/IP and a repetitive calculation of a communication protocol, such as Internet Protocol Security (IPsec), for encryption are offloaded to an external device instead of being executed by the CPU, so as to make it possible to enhance a communication speed and reduce a delay period.
However, it is rather difficult to directly access a resource held by another CPU. While changing addresses makes it possible to access all resources, a different CPU has a different address space, and therefore a conversion will be complex, making it difficult to respond to a change in architecture. Several methods exist for sharing a resource among a plurality of CPUs. Known techniques include, for example, bus bridges, remote procedure call (PRC), and memory-mapped I/O.